import { defineStore } from 'pinia'
import {ref} from 'vue'
import { computed } from 'vue'
import {userStorey} from '@/stores/index.js'
import {addCartList,getCartList,deleteCartList,updateCartList,updateCartStatus} from '@/api/cart.js'
export const cartStore=defineStore('cart',()=>{
  // 初始化cartList
  const initCartList=async ()=>{
    const {result:res}=await getCartList()
    cartList.value=res
  }
  const user=userStorey()
  // 是否有token
  const isLogin=computed(()=>{return user.userInfo.token})
  // 本地购物车实现
  const cartList=ref([])
  const addCart=async (val)=>{
    // 登录
    if(isLogin.value) {
      // 添加购物车 
      await addCartList({skuId:val.skuId,count:val.count})
      // 获取购物车
      await initCartList()
    }
    // 未登录
    else {
      const result=cartList.value.find(item=>{
        return item.skuId==val.skuId
      })
      if(result) {
        result.count=val.count
      }
      else {
        cartList.value.push(val)
      }
    }

  }
  const deletes=async (skuId)=>{
    if(isLogin.value) {
      // 删除购物车
      await deleteCartList([skuId])
      await initCartList()
    }
    cartList.value=cartList.value.filter(item=>{
      return item.skuId!==skuId
    })
  }
  // 清除购物车
  const clearCart=()=>{
    cartList.value=[]

  }
  // 修改数量
  const changeNum=async (id,selected,count)=>{
    if(isLogin.value) {
      await updateCartList(id,selected,count)
      await initCartList()
    }
    else {
      const result=cartList.value.find(item=>{
        return item.skuId==val.skuId
      })
      result.count=count
    }
  }
  // 总数量
  const total=computed(()=>{
    let total=0
    cartList.value.forEach(item=>{
      total+=item.count
    })
    return total
  })
  // 总价格
  const sum=computed(()=>{
    let sum=0
    cartList.value.forEach(item=>{
      sum+=item.count*item.price
    })
    return sum.toFixed(2)
  })
  // 全选状态
  const allStatus=computed(()=>{
    return cartList.value.every((item)=>{
      return item.selected
    })
  })
  // 已选数量
  const num=computed(()=>{
    let num=0
    cartList.value.forEach((item)=>{
      if(item.selected) {
        num+=item.count
      }
    })
    return num
 })
 const price=computed(()=>{
  let price=0
  cartList.value.forEach((item)=>{
    if(item.selected) {
      price+=item.count*item.price
    }
  })
  return price.toFixed(2)
})
// 单选
const singleCheck=async (skuId,val)=>{
  const fin=cartList.value.find(item=>item.skuId==skuId)
  fin.selected=val
  if(isLogin.value) {
    await updateCartStatus(val,[skuId])
  }
}
// 全选
const changeAllStatus=async (val)=>{
  let ids=[]
  if(isLogin.value) {
    cartList.value.forEach(item=>{
      ids.push(item.skuId)
    })
    await updateCartStatus(val,ids)
  }
  cartList.value.forEach(item=>{
    item.selected=val
  })
}
  return {
    cartList,
    addCart,
    deletes,
    total,
    sum,
    allStatus,
    num,
    price,
    singleCheck,
    changeAllStatus,
    clearCart,
    changeNum,
    initCartList
  }
},
{
  persist:true
})